cesium 材质设置

cesium 材质设置

浏览: 32评论: 0
发布时间: 2025-11-26

一、 Cesium 材质概览

在 Cesium 的 Entity API 中,材质主要通过 material 属性来设置。大体上,我们可以把材质分为两类:

  1. 通用材质 (General):可以用在 Polygon (面)、Rectangle (矩形)、Ellipsoid (球)、Wall (墙) 等几何体上。
  2. 折线专用材质 (Polyline):只能用在 Polyline (线) 上,这一类材质通常特效最炫酷。

二、 通用材质 (给几何体换肤)

// 初始化 Cesium 视图容器
const viewer = new Cesium.Viewer('cesiumContainer');

1. 颜色材质 (ColorMaterialProperty)

最基础的材质,支持透明度。

// 添加一个红色的球体
viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 300000.0), // 设置位置:经度、纬度、高度
    ellipsoid: {
        radii: new Cesium.Cartesian3(200000.0, 200000.0, 200000.0), // 设置球体的长宽高半径
        // 【重点】直接使用 Color 类,Cesium 会自动封装成 ColorMaterialProperty
        material: Cesium.Color.RED.withAlpha(0.5), // 红色,半透明
        outline: true, // 显示边框
        outlineColor: Cesium.Color.BLACK // 边框颜色
    }
});

2. 图片/纹理材质 (ImageMaterialProperty)

把一张图片贴在物体表面,做地表覆盖、广告牌墙体时很常用。

viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 100000.0),
    rectangle: {
        coordinates: Cesium.Rectangle.fromDegrees(-97.0, 38.0, -93.0, 42.0), // 矩形范围
        // 【重点】使用 ImageMaterialProperty 加载图片
        material: new Cesium.ImageMaterialProperty({
            image: 'path/to/your/image.png', // 图片地址,可以是本地路径或 URL
            color: Cesium.Color.WHITE, // 颜色混合,WHITE 表示保持原图色彩
            transparent: true // 是否开启透明通道(如果是 PNG 透明图,一定要设为 true)
        })
    }
});

3. 网格材质 (GridMaterialProperty)

非常有科技感,常用于调试或者制作“覆盖层”效果。

viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-90.0, 40.0),
    wall: {
        positions: Cesium.Cartesian3.fromDegreesArray([-91.0, 40.0, -89.0, 40.0]), // 墙的轨迹
        maximumHeights: [100000, 100000], // 墙的高度
        // 【重点】Grid 材质
        material: new Cesium.GridMaterialProperty({
            color: Cesium.Color.YELLOW, // 网格线的颜色
            cellAlpha: 0.2, // 单元格中间区域的透明度
            lineCount: new Cesium.Cartesian2(8, 8), // 行列的网格数量
            lineThickness: new Cesium.Cartesian2(2.0, 2.0) // 网格线的粗细
        })
    }
});

4. 条纹材质 (StripeMaterialProperty)

类似斑马线的效果。

viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-85.0, 40.0, 100000.0),
    ellipsoid: {
        radii: new Cesium.Cartesian3(200000.0, 200000.0, 200000.0),
        // 【重点】Stripe 材质
        material: new Cesium.StripeMaterialProperty({
            evenColor: Cesium.Color.WHITE, // 偶数条纹颜色
            oddColor: Cesium.Color.BLUE,   // 奇数条纹颜色
            repeat: 10, // 条纹重复次数
            orientation: Cesium.StripeOrientation.VERTICAL // 条纹方向:垂直或水平
        })
    }
});

5. 棋盘材质 (CheckerboardMaterialProperty)

黑白相间(或者自定义颜色)的棋盘格,适合做地面铺装效果。

viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-80.0, 40.0, 100000.0),
    plane: {
        plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Z, 0.0), // 创建一个平面
        dimensions: new Cesium.Cartesian2(400000.0, 400000.0), // 平面尺寸
        // 【重点】Checkerboard 材质
        material: new Cesium.CheckerboardMaterialProperty({
            evenColor: Cesium.Color.RED, // 偶数格颜色
            oddColor: Cesium.Color.WHITE, // 奇数格颜色
            repeat: new Cesium.Cartesian2(4, 4) // 横向和纵向的重复次数
        })
    }
});

三、 线状材质 (Polyline 专属,特效拉满)

注意:以下材质只能用在 polyline 属性中,用在 wall 或者 polygon 上会报错或者不显示!

1. 箭头材质 (PolylineArrowMaterialProperty)

用来画航线、轨迹线非常合适。

viewer.entities.add({
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArray([-75, 35, -125, 35]), // 线条坐标点
        width: 10, // 线宽,宽一点箭头才明显
        // 【重点】箭头材质
        material: new Cesium.PolylineArrowMaterialProperty(
            Cesium.Color.PURPLE // 箭头的颜色
        )
    }
});

2. 虚线材质 (PolylineDashMaterialProperty)

常用于表示规划路线或边界。

viewer.entities.add({
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArray([-75, 40, -125, 40]),
        width: 5,
        // 【重点】虚线材质
        material: new Cesium.PolylineDashMaterialProperty({
            color: Cesium.Color.CYAN, // 线条颜色
            gapColor: Cesium.Color.TRANSPARENT, // 间隙颜色,设为透明即为镂空
            dashLength: 30.0, // 每一段虚线的长度
            dashPattern: 255 // 虚线样式的二进制掩码(高级用法,一般默认即可)
        })
    }
});

3. 发光/光晕材质 (PolylineGlowMaterialProperty)

这是我最喜欢的材质,这就是传说中的“流光效果”的基础,非常有科技感,适合做智慧城市路网。

viewer.entities.add({
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArray([-75, 45, -125, 45]),
        width: 10, // 宽度大一点,光晕效果更好
        // 【重点】光晕材质
        material: new Cesium.PolylineGlowMaterialProperty({
            glowPower: 0.2, // 发光强度,数值越小,中心越亮,边缘越模糊
            taperPower: 0.5, // 尾部锥形效果,1.0 表示无锥形
            color: Cesium.Color.CORNFLOWERBLUE // 最终呈现的颜色
        })
    }
});

4. 轮廓材质 (PolylineOutlineMaterialProperty)

给线条加个描边,能让线条在复杂的背景地图上更清晰。

viewer.entities.add({
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArray([-75, 50, -125, 50]),
        width: 10,
        // 【重点】轮廓材质
        material: new Cesium.PolylineOutlineMaterialProperty({
            color: Cesium.Color.ORANGE, // 内部线条颜色
            outlineWidth: 2, // 轮廓宽度
            outlineColor: Cesium.Color.BLACK // 轮廓颜色
        })
    }
});